package util

import (
	"fmt"
	"os"
	"path/filepath"
)

func GetDirSize(path string) (int64, error) {
	var totalSize int64

	err := filepath.WalkDir(path, func(filePath string, d os.DirEntry, err error) error {
		if err != nil {
			// 记录错误但继续处理其他文件
			fmt.Printf("访问 %s 时出错: %v\n", filePath, err)
			return nil
		}

		// 跳过目录本身（只计算文件内容）
		if d.IsDir() {
			return nil
		}

		// 处理符号链接（计算链接本身大小，不跟随链接）
		if d.Type()&os.ModeSymlink != 0 {
			info, err := d.Info()
			if err != nil {
				return err
			}
			totalSize += info.Size()
			return nil
		}

		// 计算普通文件大小
		info, err := d.Info()
		if err != nil {
			return err
		}
		totalSize += info.Size()
		return nil
	})

	return totalSize, err
}
